package util;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.OpenOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;

/**
 * IO类是对Java11版本的部分IO功能的封装，以降低开发难度 <br>
 * IO类提供了3个静态方法，并在主函数中提供了使用样例 <br>
 * 
 * 参考资料：<br>
 * https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/Files.html
 * <br>
 * https://docs.oracle.com/javase/8/docs/api/java/nio/file/Paths.html
 * 
 */
public class IO {

    static OpenOption[] options;
    static {
        options = new OpenOption[] { StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE };
    }

    /**
     * 读取文件到字符串列表
     * 
     * @param file
     * @param cs
     * @return
     */
    public static List<String> fileToStringList(String file, Charset cs) {
        List<String> stringList = null;
        try {
            Path p = Paths.get(file);
            stringList = Files.readAllLines(p, cs);
        } catch (IOException e) {
            System.err.println(e);
        }
        return stringList;
    }

    /**
     * 将字符串写入文件
     * 
     * @param file
     * @param cs
     * @param content
     */
    public static void stringToFile(String file, Charset cs, String content) {
        try {
            Path p = Paths.get(file);
            Files.writeString(p, content, cs, options);
        } catch (IOException e) {
            System.err.println(e);
        }
    }

    /**
     * 创建一个目录，默认递归创建
     * 
     * @param dir
     */
    public static void mkdir(String dir) {
        try {
            Path p = Paths.get(dir);
            Files.createDirectories(p);
        } catch (Exception e) {
            System.err.println(e);
        }
    }

    public static void main(String[] args) {
        // 测试
        // javac -cp src/ -d dist/ src/util/IO.java
        // java -cp dist/ util.IO tmp/ name-list.csv tmp/name-list-copy.csv
        String tmpDir = args[0];
        String nameListFile = args[1];
        String nameListCopyFile = args[2];

        // 创建一个目录
        IO.mkdir(tmpDir);

        // 读取文件到字符串列表
        List<String> lineList = IO.fileToStringList(nameListFile, StandardCharsets.UTF_8);
        System.out.println(lineList);

        // 将字符串写入文件
        String content = String.join("\n", lineList);
        IO.stringToFile(nameListCopyFile, StandardCharsets.UTF_8, content);

    }
}
